﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tecnopez.Globals;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.AtencionCliente.Cliente;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_Cliente_ABMClientes : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.Page.IsPostBack)
        {
            SetMode(PageMode.ListMode);
        }

        TPPTipoDocumento.ObjType = typeof(TipoDocumento);
        TPPCondicionIVA.ObjType = typeof(TipoCondicionIVA);
        TPPTipoCliente.ObjType = typeof(TipoCliente);

        InicializarValidadores();
        InicializarGrilla();

        cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/empleados.gif";
        master.Titulo = "Gestión de Clientes";
        cargarGrilla();
        _lblError.Text = "";
    }

    private void InicializarValidadores()
    {
        PPVRazonSocial.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVRazonSocial.ControlToValidate = "txtRazonSocial";
        PPVRazonSocial.PropertyName = "RazonSocial";
        PPVRazonSocial.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVCodigo.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVCodigo.ControlToValidate = "txtCodigo";
        PPVCodigo.PropertyName = "Codigo";
        PPVCodigo.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVTipoDocumento.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVTipoDocumento.ControlToValidate = "txtCodigo";
        PPVTipoDocumento.PropertyName = "TipoDocumento";
        PPVTipoDocumento.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVNumeroDocumento.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVNumeroDocumento.ControlToValidate = "txtNumeroDocumento";
        PPVNumeroDocumento.PropertyName = "NumeroDocumento";
        PPVNumeroDocumento.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVCorreoElectronico.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVCorreoElectronico.ControlToValidate = "txtCorreoElectronico";
        PPVCorreoElectronico.PropertyName = "CorreoElectronico";
        PPVCorreoElectronico.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVCondicionIVA.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVCondicionIVA.ControlToValidate = "txtCorreoElectronico";
        PPVCondicionIVA.PropertyName = "TipoCondicionIVA";
        PPVCondicionIVA.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVTipoCliente.SourceTypeName = "BussinessLogicTecnoPez.AtencionCliente.Cliente.Cliente";
        PPVTipoCliente.ControlToValidate = "txtCorreoElectronico";
        PPVTipoCliente.PropertyName = "TipoCliente";
        PPVTipoCliente.DisplayMode = ValidationSummaryDisplayMode.List;
    }

    private void InicializarGrilla()
    {
        grdClientes.setupGrid<Cliente>(cargarGrilla, seleccionarCliente, null, true, this.ViewState);
    }

    private void seleccionarCliente(int o)
    {
        int IdCliente = int.Parse(grdClientes.grdDatosAbmView.DataKeys[o].Value.ToString());
        Cliente.getManager.ClearFilters();
        Cliente.getManager.AddFilter("IDCLIENTE", GenericManager<Cliente>.filterOperator.Equals, IdCliente);
        Cliente objCliente = Cliente.getManager.GetOne();
        txtId.Text = objCliente.IdCliente.ToString();
        txtRazonSocial.Text = objCliente.RazonSocial;
        txtCodigo.Text = objCliente.Codigo;
        txtNumeroDocumento.Text = objCliente.NumeroDocumento.ToString();
        txtDireccion.Text = objCliente.Direccion;
        txtCorreoElectronico.Text = objCliente.CorreoElectronico;
        txtTelefono.Text = objCliente.Telefono;
        txtDescripcion.Text = objCliente.Descripcion;
        txtObservaciones.Text = objCliente.Observaciones;

        if (objCliente.TipoDocumento != null)
            TPPTipoDocumento.ItemSelected = objCliente.TipoDocumento;
        else
            TPPTipoDocumento.ItemSelected = null;

        if (objCliente.TipoCliente != null)
            TPPTipoCliente.ItemSelected = objCliente.TipoCliente;
        else
            TPPTipoCliente.ItemSelected = null;

        if (objCliente.TipoCondicionIVA != null)
            TPPCondicionIVA.ItemSelected = objCliente.TipoCondicionIVA;
        else
            TPPCondicionIVA.ItemSelected = null;

        SetMode(PageMode.ViewMode);
    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.ReadOnly = true;
                txtRazonSocial.ReadOnly = false;
                txtNumeroDocumento.ReadOnly = false;
                txtDescripcion.ReadOnly = false;
                txtObservaciones.ReadOnly = false;
                TPPTipoDocumento.Enable = true;
                TPPCondicionIVA.Enable = true;
                TPPTipoCliente.Enable = true;
                txtTelefono.ReadOnly = false;
                txtDireccion.ReadOnly = false;
                txtCorreoElectronico.ReadOnly = false;
                txtCodigo.ReadOnly = false;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.EditMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.ReadOnly = true;
                txtRazonSocial.ReadOnly = false;
                txtNumeroDocumento.ReadOnly = false;
                txtDescripcion.ReadOnly = false;
                txtObservaciones.ReadOnly = false;
                TPPTipoDocumento.Enable = true;
                TPPCondicionIVA.Enable = true;
                TPPTipoCliente.Enable = true;
                txtTelefono.ReadOnly = false;
                txtDireccion.ReadOnly = false;
                txtCorreoElectronico.ReadOnly = false;
                txtCodigo.ReadOnly = false;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.ViewMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.ReadOnly = true;
                txtRazonSocial.ReadOnly = true;
                txtNumeroDocumento.ReadOnly = true;
                txtDescripcion.ReadOnly = true;
                txtObservaciones.ReadOnly = true;
                TPPTipoDocumento.Enable = false;
                TPPCondicionIVA.Enable = false;
                TPPTipoCliente.Enable = false;
                txtTelefono.ReadOnly = true;
                txtDireccion.ReadOnly = true;
                txtCorreoElectronico.ReadOnly = true;
                txtCodigo.ReadOnly = true;
                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                break;
        }

    }

    private void cargarGrilla()
    {
        Cliente.getManager.ClearFilters();
        Cliente.getManager.ClearOrders();

        Cliente.getManager.AddFilter("RAZONSOCIAL", GenericManager<Cliente>.filterOperator.Like, "%" + this.txtBuscarRazonSocial.Text + "%");
        Cliente.getManager.AddFilter("CODIGO", GenericManager<Cliente>.filterOperator.Like, "%" + this.txtBuscarCodigo.Text + "%");

        if (ViewState["orden"] == null)
            Cliente.getManager.AddOrder("IdCliente", GenericManager<Cliente>.Order.orderDirection.DESC);
        else
            Cliente.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Cliente>.Order.orderDirection)ViewState["ordenDireccion"]);

        List<Cliente> lista = new List<Cliente>();
        lista = Cliente.getManager.GetFilter();
        grdClientes.grdDatosAbmView.DataSource = lista;
        grdClientes.grdDatosAbmView.DataBind();
    }
    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        Functions.limpiarTextBoxes(txtCodigo, txtCorreoElectronico, txtDescripcion, txtDireccion, txtId, txtNumeroDocumento, txtObservaciones, txtRazonSocial, txtTelefono);
        TPPCondicionIVA.ItemSelected = null;
        TPPTipoCliente.ItemSelected = null;
        TPPTipoDocumento.ItemSelected = null;

        SetMode(PageMode.NewMode);
    }
    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
    }
    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Cliente objCliente = new Cliente();
            objCliente.IdCliente = int.Parse(this.txtId.Text.Trim());
            if (Cliente.getManager.Delete(objCliente) < 1)
                _lblError.Text = Cliente.getManager.GeneratedException.Message;
            else
            {
                SetMode(PageMode.ListMode);
                cargarGrilla();
            }
        }
        catch (Exception ex)
        {
            _lblError.Text = ex.Message;
        }
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Cliente objCliente = new Cliente();
            objCliente.Codigo = txtCodigo.Text.Trim();
            objCliente.CorreoElectronico = txtCorreoElectronico.Text.Trim();
            objCliente.Descripcion = txtDescripcion.Text.Trim();
            objCliente.Direccion = txtDireccion.Text.Trim();
            objCliente.NumeroDocumento = int.Parse(txtNumeroDocumento.Text.Trim());
            objCliente.Observaciones = txtObservaciones.Text.Trim();
            objCliente.RazonSocial = txtRazonSocial.Text.Trim();
            objCliente.Telefono = txtTelefono.Text.Trim();

            if (TPPTipoDocumento.ItemSelected != null)
            {
                TipoDocumento objTipoDoc = new TipoDocumento();
                objTipoDoc = (TipoDocumento)TPPTipoDocumento.ItemSelected;
                objCliente.TipoDocumento = objTipoDoc;
                objTipoDoc = null;
            }

            if (TPPCondicionIVA.ItemSelected != null)
            {
                TipoCondicionIVA objTipoIVA = new TipoCondicionIVA();
                objTipoIVA = (TipoCondicionIVA)TPPCondicionIVA.ItemSelected;
                objCliente.TipoCondicionIVA = objTipoIVA;
                objTipoIVA = null;
            }

            if (TPPTipoCliente.ItemSelected != null)
            {
                TipoCliente objTipoCli = new TipoCliente();
                objTipoCli = (TipoCliente)TPPTipoCliente.ItemSelected;
                objCliente.TipoCliente = objTipoCli;
                objTipoCli = null;
            }

            if (validar(objCliente))
            {
                if (getMode() == PageMode.NewMode)
                {
                    if (Cliente.getManager.Insert(objCliente) != true)
                    {
                        throw Cliente.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ListMode);
                    cargarGrilla();
                }
                else
                {
                    objCliente.IdCliente = int.Parse(txtId.Text.Trim());
                    if (Cliente.getManager.Update(objCliente) != true)
                    {
                        throw Cliente.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ViewMode);
                }
            }
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }
    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    private bool validar(Cliente objeto)
    {
        ValidationResults v = Validation.Validate<Cliente>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;

    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }
    protected void PPVTipoDocumento_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPTipoDocumento.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPTipoDocumento.ItemSelected.ToString();
    }
    protected void PPVCondicionIVA_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPCondicionIVA.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPCondicionIVA.ItemSelected.ToString();
    }
    protected void PPVTipoCliente_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPTipoCliente.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPTipoCliente.ItemSelected.ToString();
    }
}
